Today, software applications provide rich filtering and searching capabilities for a variety of data. In one example, an email application may allow users to filter emails by date received, sender, subject, etc. In another example, a photo gallery web application may allow users to filter photos based upon date uploaded, people tagged within the photos, user rating, color, etc. Such filters may improve a user's search experience by narrowing a large amount of data into manageable sets of search results. Unfortunately, the process of filtering/searching may result in extensive trial and error for the user. For example, a user may attempt to locate an email sent by someone having the first name Dan about 5 to 9 months ago. At first, the user may choose a “date” filter (e.g., date=past year), and then commit a search query using the “date” filter. Unfortunately, the user may clear/dismiss the search results, and start over because the search results may comprise a large amount of emails that may be burdensome to sift through. Starting over, the user may choose a different filter, such as a “sender” filter (e.g., sender=“Dan”), and then commit a search query using the “sender” filter. Again the search results may comprise a large amount of emails that may not be helpful. The search, clear, new search cycle may be repeated multiple times before the desired email is found. This type of user experience may be cumbersome, require a large number of user inputs (e.g., mouse clicks), and may diminish the user's confidence and satisfaction with application's overall search experience.